Skip to main content

Cash - CS50x 2023

编写程序,计算找零所需的最少硬币数。

$ python cash.py
Change owed: 0.41
4

开始

登录 cs50.dev,点击你的终端窗口,然后单独执行 cd。 你应该会看到终端提示符如下所示:

接下来执行

wget https://cdn.cs50.net/2022/fall/psets/6/sentimental-cash.zip

以便将名为 sentimental-cash.zip 的 ZIP 文件下载到你的 codespace。

然后执行

unzip sentimental-cash.zip

来创建一个名为 sentimental-cash 的文件夹。 你不再需要此 ZIP 文件,可以执行以下命令

并在提示符后输入 y 并按回车键,删除已下载的 ZIP 文件。

现在输入

然后按回车键进入该目录。 现在你的提示符应该如下所示。

单独执行 ls,你应该看到 cash.py。 如果你遇到任何问题,请再次按照这些相同的步骤操作,看看你是否能确定你哪里出错了!

规范

  • cash.py 文件中编写一个程序,首先询问用户应找零多少,然后输出组成该零钱的最少硬币数。 你可以参考问题集 1的做法,但这次你的程序需要用 Python 编写,并假设用户以美元输入找零金额(例如,0.50 美元,而不是 50 美分)。
  • 使用 CS50 库中的 get_float 获取用户的输入,并使用 print 输出你的答案。 假设唯一可用的硬币是 25 美分(quarter)、10 美分(dime)、5 美分(nickel)和 1 美分(penny)。
    • 我们要求使用 get_float 来处理美元和美分,即使没有美元符号。 也就是说,如果顾客欠款 9.75 美元(例如,报纸 25 美分,顾客支付 10 美元),程序应接收 9.75 作为输入,而不是 $9.75975。 同样,如果顾客正好欠 9 美元,程序应接收 9.009,而不是 $9900
    • 由于浮点数的特性,程序可能也能处理 9.09.000 这样的输入;你无需验证用户输入的金额格式是否正确。
  • 如果用户输入的不是非负值,程序应反复提示用户输入有效的金额,直到输入正确为止。
  • 为了方便自动化测试,程序最后一行输出应仅包含最少硬币数量,即一个整数,后跟一个换行符。

用法

你的程序的行为应符合以下示例。

$ python cash.py
Change owed: 0.41
4

测试

虽然可以使用 check50 来检查此问题,但我们建议你首先按照以下步骤自行测试你的代码。

  • 运行程序 python cash.py,等待提示输入。输入 0.41,然后按回车。程序应该输出 4
  • 运行程序 python cash.py,等待提示输入。输入 0.01,然后按回车。程序应该输出 1
  • 运行程序 python cash.py,等待提示输入。输入 0.15,然后按回车。程序应该输出 2
  • 运行程序 python cash.py,等待提示输入。输入 1.60,然后按回车。程序应该输出 7
  • 运行程序 python cash.py,等待提示输入。输入 23,然后按回车。程序应该输出 92
  • 运行程序 python cash.py,等待提示输入。输入 4.2,然后按回车。程序应该输出 18
  • 运行程序 python cash.py,等待提示输入。输入 -1,然后按回车。程序应该拒绝此无效输入,并再次提示用户输入。
  • 运行程序 python cash.py,等待提示输入。输入 foo,然后按回车。程序应该拒绝此无效输入,并再次提示用户输入。
  • 运行程序 python cash.py,等待提示输入。不要输入任何内容,然后按回车。程序应该拒绝此无效输入,并再次提示用户输入。

执行以下命令,使用 check50 评估代码的正确性。 别忘了自己编译并测试!

check50 cs50/problems/2023/x/sentimental/cash

执行以下命令,使用 style50 评估代码的风格。

如何提交

在终端中执行以下命令,提交你的作品。

submit50 cs50/problems/2023/x/sentimental/cash